home *** CD-ROM | disk | FTP | other *** search
/ Directorty Opus 5 - Magellan 2 / Opus 5 - Magellan 2.iso / Extras / Install_3.3 / ARexx / Install_Execute.dopus5 next >
Text File  |  1997-05-09  |  4KB  |  150 lines

  1. /* $VER: Install_Execute.dopus5 3.1 (09.05.97) © Frédéric Steinfels
  2. */
  3.  
  4.  
  5. signal on BREAK_C
  6. signal on BREAK_D
  7. signal on BREAK_E
  8. signal on BREAK_F
  9. signal on HALT
  10. signal on IOERR
  11. signal on SYNTAX
  12. signal on FAILURE
  13. options failat 21
  14. options results
  15. parse arg arguments
  16. ProgramName = "Install_Execute.dopus5";
  17. ArgsTemplate = "PORT/A,MNPORT/A,MYPORT/A,MYID/A,SRCP/A,DSTP/A"
  18. lf='0a'x
  19. if strip(arguments) = '?' then do
  20.     Call WriteCh(STDOUT, ArgsTemplate || ': ')
  21.     pull arguments
  22. end; else nop
  23. if ~ReadArgs(arguments,ArgsTemplate) then do
  24.     say Fault(RC,ProgramName)
  25.      exit 10
  26. end; else nop
  27. drop arguments
  28. catalog=opencatalog('Install.dopus5.catalog','english',0)
  29.  
  30. address value PORT
  31.  
  32. MYPORTH=openport(MYPORT)
  33.  
  34. do until CMD='0'
  35.     call waitpkt(MYPORT)
  36.     Packet=getpkt(MYPORT)
  37.     if Packet ~= null() then do
  38.         ln = getarg(Packet,0)
  39.         ID=substr(ln,1,1)
  40.         CMD=substr(ln,2,1)
  41.         ARG=substr(ln,3)
  42.         call CheckArg
  43.         IF ID=0 THEN DO
  44.             IF CMD=1 THEN DO
  45.                 parse var arg path '0a'x file
  46.                 dst=makepath(dstp,path)
  47.                 Call CheckExDir
  48.                 command wait copy quiet '"' || makepath(makepath(srcp,path),file) || '" "' || makepath(dstp,path) || '"'
  49.             end
  50.             IF CMD=2 THEN DO
  51.                 parse var arg path '0a'x file
  52.                 dst=makepath(dstp,path)
  53.                 Call CheckExDir
  54.                 command wait copy quiet '"' || makepath(makepath(dstp,path),file) || '" "' || makepath(srcp,path) || '"'
  55.             end
  56.         end
  57.         IF ID=6 THEN DO
  58.             IF CMD=1 THEN DO
  59.                 parse var arg path '0a'x file
  60.                 command wait delete quiet '"' || makepath(makepath(dstp,path),file) || '"'
  61.                 dst=makepath(dstp,path)
  62.                 Call CheckExDir
  63.                 command wait copy quiet '"' || makepath(makepath(srcp,path),file) || '" "' || makepath(dstp,path) || '"'
  64.             end
  65.             IF CMD=2 THEN DO
  66.                 parse var arg path '0a'x file
  67.                 command wait delete quiet '"' || makepath(makepath(srcp,path),file) || '"'
  68.                 dst=makepath(dstp,path)
  69.                 Call CheckExDir
  70.                 command wait copy quiet '"' || makepath(makepath(dstp,path),file) || '" "' || makepath(srcp,path) || '"'
  71.             end
  72.         end
  73.     end
  74. end    
  75.         
  76. Call CleanUP
  77. exit
  78.  
  79.  
  80. CheckExDir:
  81. if exists(dst) then return
  82. parse var dst dst2 '/' rest
  83. do until exists(dst)
  84.     if ~exists(dst2) then do
  85.         command wait makedir noicon '"' || dst2 || '"'
  86.     end
  87.     parse var rest new '/' rest
  88.     dst2=dst2 || '/' || new
  89. end
  90. return
  91.     
  92.  
  93.  
  94.  
  95. CheckArg:
  96. IF DATATYPE(ID)~='NUM' | DATATYPE(CMD)~='NUM' THEN Call CheckArgFail
  97. IF ID=0 & CMD<3 THEN return
  98. IF ID=6 & CMD<3 THEN return
  99. Call CheckArgFail
  100. RETURN
  101.  
  102.  
  103. CheckArgFail:
  104. address value PORT
  105. dopus request '"' || GetCatStr(18,'Error in') ProgramName || lf || GetCatStr(61,'Port') MYPORT || lf || GetCatStr(52,'Invalid packet received') || lf || 'ID=' || ID || lf || 'CMD=' || CMD || lf || 'ARG=' || ARG || '"' GetCatStr(0,'Abort')
  106. Call CleanUP
  107. exit
  108.  
  109.             
  110. ERROR:
  111. HALT:
  112. IOERR:
  113. SYNTAX:
  114. IF RC ~= 0 THEN DO
  115.  line=sigl
  116.  text=errortext(rc)
  117.  dopus request '"' || GetCatStr(18,'Error in') ProgramName || lf || GetCatStr(61,'Port') MYPORT || lf || text || lf || GetCatStr(19,'Line') line || '"' GetCatStr(0,'Abort')
  118. END
  119. else do
  120.  dopus request '"' || GetCatStr(18,'Error in') ProgramName || lf || GetCatStr(61,'Port') MYPORT || '"' GetCatStr(0,'Abort')
  121. end
  122. BREAK_C:
  123. BREAK_D:
  124. BREAK_E:
  125. BREAK_F:
  126. Call CleanUP
  127. exit
  128.  
  129.  
  130. CleanUp:
  131. dopus send MNPORT MYID || 0
  132. if POS(MYPORT,SHOW('p'))~=0 then do
  133.     Call FORBID()
  134.     Call ClosePort(MYPORTH)
  135.     Call PERMIT()
  136. end
  137. Call CloseCatalog(catalog)
  138. return
  139.  
  140.  
  141. getcatstr: /* Thank you for this procedure, Edmund */
  142. parse arg msgno,msgstring
  143. if catalog~=0 then
  144.    msgstring=getcatalogstr(catalog,msgno,msgstring)
  145. do i=3 to arg()
  146.    parse var msgstring fore '%s' aft
  147.    msgstring=fore||arg(i)||aft
  148.    end
  149. return msgstring
  150.